<?php

namespace app\common\service;
use think\facade\Env;
use app\common\service\HttpService;
use think\facade\Log;

/*
 * 豆包AI文章生成
 * */
class DouBaoAiArticleService extends ApiService
{

    private $apiKey;
    private $secretKey;
    private $endpointId;
    private $apiUrl;

    public function __construct()
    {
        $this->apiKey = env('DOUBAO.DOUBAO_1_5_PRO_32_API_KEY', '');
        $this->endpointId = env('DOUBAO.DOUBAO_1_5_PRO_32_ENDPOINT_ID', '');
        $this->apiUrl = 'https://ark.cn-beijing.volces.com/api/v3/chat/completions';
    }
    /**
     * 调用火山引擎单轮对话
     *
     * @param string $words 所选单词
     * @return array AI回复内容
     * @throws Exception
     */
    public  function getArticleNewByWords(string $words): array
    {
        $content = <<<EOT
        首先，我会给你一组单词（{$words}）。你要根据这些单词按以下要求生成一篇英文文章：
                    1. 生成的文章内容中必须包含给出的单词并且文章的故事需有头有尾。
                    2. 文章内容需智能拆分为多段落格式且段落数并非固定，根据实际内容进行调整。
                    3. 文章内容单词总数不得超过150个单词且最低单词总数不低于120个单词。
                    4. 内容连贯通顺无明显搭配错误并控制在10秒内响应输出。
                    5. 文章的结构要求如下
                     - titleEn：为文章英文标题。
                     - titleCh：为文章中文标题。
                     - paragraphs：为文章段落集合，每个段落包含完整的英文内容以及该段落的中文翻译，格式为：{"en":"英文段落内容","cn":"英文段落中文翻译"}，每段必须同时存在en和cn。
                    6. 请严格按照以上要求，将生成的文章以JSON格式输出。例如：
                    {
                    "titleEn": "My name is Emma.",
                    "titleCh": "我叫艾玛",
                    "paragraphs":[
                            {
                                "en":"My name is Emma. I am a girl.I am twelve years old.",
                                "cn":"我叫艾玛。我是一个女孩。我十二岁了。"
                            },
                            {
                                "en": "Today is my birthday. I am having a birthday party in my house.",
                                "cn": "今天是我的生日。我要在家里举行一个生日聚会。"
                            },
                            {
                                "en":"Look! My dad is singing a song. My mum is listening to my dad. My grandfather is drawing a picture for me. My grandmother is pointing at the picture.",
                                "cn":"看！我爸爸正在唱歌。我妈妈正在听我爸爸说话。我爷爷正在给我画一幅画。我奶奶指着那幅画。"
                            },
                            {
                                "en": "My friends, LiMing and Jenny are eating some cakes. Where is Danny? He is quiet. He is eating an ice cream.",
                                "cn": "我的朋友，李明和珍妮正在吃蛋糕。丹尼在哪里?他很安静。他正在吃冰淇淋。"
                            },
                            {
                                "en": "I am looking at my birthday gifts. I am very happy.",
                                "cn": "我在看我的生日礼物。我很高兴。"
                            }
                        ]
                    }
                    现在，请根据提供的单词（{$words}）开始生成文章并转换为JSON格式输出。
        EOT;
        // 2. 构建认证头
        $authToken = 'Bearer ' . $this->apiKey;

        // 3. 构造单轮对话消息
        $payload = [
            'model' => $this->endpointId,
            'messages' => [
                ['role' => 'user', 'content' => $content]
            ]
        ];

        // 4. 调用CURL服务
        $response = HttpService::postJson(
            $this->apiUrl,
            $payload,
            ['Authorization: ' . $authToken]
        );
        // 5. 解析响应
        $jsonData = json_decode($response, true);
        if (isset($jsonData['status']) && $jsonData['status'] == false) {
            getResponseException('响应超时');
        }
        if (isset($jsonData['error'])) {
            getResponseException('单词文章生成失败');
        }
        $reasoning_content = $jsonData['choices'][0]['message']['content'];
        //结果可能带有以下字符需要去除一下
        $reasoning_content = ltrim($reasoning_content,'```json');
        $reasoning_content = rtrim($reasoning_content,'```');

//        Log::info('reasoning_content:'.$reasoning_content);
        $reasoning_content = json_decode($reasoning_content,true);
        logSave($reasoning_content, '生成文章转换结果');
        return $reasoning_content;
    }
}